tf镜像烧录解读

〇.背景

本文所属目录层次为:

-> 2.系统移植
    -> 1.基于linux-sunxi SDK的系统移植
        -> 3. tf镜像烧录解读

这里对荔枝派的镜像烧录进行解读

一.系统镜像组成

TF卡或者其他存储介质中的系统镜像组成如下:

  1. boot部分,含boot0和boot1/uboot
  2. linux内核部分,含启动参数和fex配置
  3. linux根文件系统

Note

** 回想下在启动过程中这三个部分是如何串联起来的?

二.烧录boot部分镜像

将前面编译出的u-boot-sunxi-with-spl.bin烧录到tf 8KB偏移处 (sdb换成你自己的tf卡读卡器设备名)

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
sudo sync

Tip

** 学习下dd命令的详细用法

三.烧录linux内核镜像

需要准备uImage,script.bin,boot.scr三个文件

Note

** 回想下这三个文件的作用?

  1. uImage
    1. 使用linux-sunxi编译后可得到uImage
  2. script.bin
    1. 使用下面命令将fex转为bin
    2. fex2bin a13-lichee.fex script.bin
    3. 需要根据使用的摄像头型号修改对应的fex字段
  3. boot.scr
    1. 使用下面命令将boot.cmd转为boot.scr
    2. mkimage -C none -A arm -T script -d boot.cmd boot.scr

Tip

** 查看fex文件和boot.cmd文件,理解各字段含义

这三个文件在uboot启动时会在第一分区搜索,所以需要新建一个TF卡分区(FAT格式),需要使用fdisk命令。

Tip

*请自行学习fdisk命令

如果原来tf卡已经有分区表,请先清除分区。

烧录相关的脚本已上传至“资源文件”目录,可以查看其中的脚本命令。

一般来说,第一分区设为16MB大小就足够了。

然后格式化为FAT格式: sudo mkfs.vfat /dev/sdb1

最后放入前面提到的三个文件即可。

四.烧录linux根文件系统

linux内核在启动时候会根据启动参数中的root参数来获得根文件系统分区号,然后加载之。

一般就按顺序把根文件系统设为第二分区,使用EXT3或者EXT4文件系统。

整个根文件系统有两种打包方式,dd方式和tar方式。

dd方式是直接备份整个分区信息,tar方式是直接打包整个分区。

dd出来的分区镜像可以直接使用mount命令在本机上加载查看,烧写速度也稍快些,所以荔枝派使用dd出来的镜像发布。

不过由于dd是备份了整个分区信息,所以连分区大小都是一致的,如果tf较大,可以自行扩容分区和文件系统

Tip

* 自学linux下扩容分区和文件系统的方法

dd if=fs2.img of=/dev/sdb2 bs=64K
sync

五.启动尝试

按上述方法准备好tf卡后,就可以尝试启动了! 把tf卡插入背面卡槽,有屏幕的插入屏幕(注意方向),有摄像头的插入摄像头(注意方向),再连上UART1(默认系统串口),上电。 正常情况就可以启动到debian系统了~

Tip

** 给出的镜像是出厂测试镜像,屏蔽了桌面系统,想开机启动桌面系统的可以尝试修改下

提供的镜像有两个用户lichee和root,密码均为lichee。 在github “资源文件”目录下,有烧写相关的文件和脚本(脚本还未整理,比较乱,不过也可以参考使用)